#ifndef _MOTORDRIVER_H_
#define _MOTORDRIVER_H_
#include "sys.h"		  
////////////////////////////////////////////////////////////////////////////////// 
#define ANCHOR_GPIOX_APB2PERIPH		RCC_APB2Periph_GPIOC


#define ANCHOR_PWR_PIN    GPIO_Pin_13
#define ANCHOR_PWR_PORT   GPIOC
#define ANCHOR_DIR_PIN    GPIO_Pin_14
#define ANCHOR_DIR_PORT   GPIOC


#define ANCHOR_PWR PCout(13)
#define ANCHOR_DIR PCout(14)

#define myabs(x) ((x>0)?(x):(-x))
#define ROUND_CNT 3
#define RATIO 522
#define BASE_PULSE 44
#define ANCHOR_PULSE 22968
#define ANCHOR_PULSE_MAX 68904//(ROUND_CNT*RATIO*BASE_PULSE)

typedef union{
	uint16_t flash_flag;
	uint16_t pulse_msb;
	uint16_t pulse_lsb;
	uint16_t sign;
	uint16_t buffer[4];
}U_ANCHOR;
extern U_ANCHOR u_anchor;
extern int32_t g_last_pulse;

void ANCHOR_GPIO_Init(void);
uint8_t ANCHOR_EVENT_RUN(uint8_t runflag,float depth,uint16_t *runcnt);
uint8_t ANCHOR_EVENT_RUN_ENC(uint8_t runflag,float depth,int32_t *pulse,uint8_t cur_flag);
void ANCHOR_PWR_ON(void);
void ANCHOR_PWR_OFF(void);
void ANCHOR_DIR_ON(void);
void ANCHOR_DIR_OFF(void);
void ANCHOR_RUN_CW(void);
void ANCHOR_RUN_CCW(void);
void ANCHOR_STOP(void);

#define STEP_ENA_PIN    GPIO_Pin_13
#define STEP_ENA_PORT   GPIOB
#define STEP_DIR_PIN    GPIO_Pin_14
#define STEP_DIR_PORT   GPIOB
#define STEP_PUL_PIN    GPIO_Pin_15
#define STEP_PUL_PORT   GPIOB

//STEP ENABIE
#define ENABIE_ON()  	GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define ENABIE_OFF() 	GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define DIR_ON()   	    GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define DIR_OFF()  	    GPIO_ResetBits(GPIOB,GPIO_Pin_14)
//#define PULSE_TOGGLE()  GPIO_ToggleBits(GPIOB,GPIO_Pin_14)
#define PULSE_ON() 		GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define PULSE_OFF() 	GPIO_ResetBits(GPIOB,GPIO_Pin_15)
//#define DIR_TOGGLE() 	GPIO_ToggleBits(GPIOB,GPIO_Pin_15)

//step motor
#define CCW 0
#define CW  1
#define ENA  1
#define DISA 0
#define HIGH    1
#define LOW     0

typedef struct
{
	uint8_t step_run_flag;
	uint8_t step_speed_flag;
	uint8_t step_enable_flag;
	uint8_t step_dir_flag;
	uint16_t step_speed;
	uint16_t step_runtime;
	uint16_t step_stoptime;
}T_STEP_MOTOR;
extern T_STEP_MOTOR t_step_motor;

void DIR_TOGGLE(void);
void PULSE_TOGGLE(void);
void step_motor_init(void);
void step_motor_prama_fill(uint8_t buf[8],uint8_t len);
void step_motor_process(T_STEP_MOTOR *t_step_motor,uint8_t *enflag,uint8_t *speedflag,uint8_t *runflag);

#define FANMOTOR_PIN    GPIO_Pin_11
#define FANMOTOR_PORT   GPIOB
#define PEUMP1_PIN    	GPIO_Pin_12
#define PEUMP1_PORT     GPIOB
#define PEUMP2_PIN    	GPIO_Pin_8
#define PEUMP2_PORT   	GPIOA

#define FANMOTOR_ON()  	GPIO_SetBits(GPIOB,GPIO_Pin_11)
#define FANMOTOR_OFF() 	GPIO_ResetBits(GPIOB,GPIO_Pin_11)
#define PEUMP1_ON()   	GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define PEUMP1_OFF()  	GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define PEUMP2_ON()   	GPIO_SetBits(GPIOA,GPIO_Pin_8)
#define PEUMP2_OFF()  	GPIO_ResetBits(GPIOA,GPIO_Pin_8)

void HIGHPOWER_GPIO_Init(void);

#endif

